/**
 * 时间格式化
 * 将 2018-09-23T11:54:16.000+0000 格式化成 2018/09/23 11:54:16
 * @param datetime 国际化日期格式
 */
export function format(datetime) {
    return formatWithSeparator(new Date(datetime), "/", ":");
}

/**
 * 时间格式化
 * 将 2018-09-23T11:54:16.000+0000 格式化成类似 2018/09/23 11:54:16
 * 可以指定日期和时间分隔符
 * @param dateMat
 * @param dateSeparator
 * @param timeSeparator
 */
export function formatWithSeparator(dateMat, dateSeparator, timeSeparator) {
    if (dateMat != null) {
        const year = dateMat.getFullYear();
        const month = dateMat.getMonth() + 1;
        const day = dateMat.getDate();
        const hh = dateMat.getHours();
        const mm = dateMat.getMinutes();
        const ss = dateMat.getSeconds();
        return year + dateSeparator
          + (month < 10 ? '0' : '') + month + dateSeparator
          + (day < 10 ? '0' : '') + day + " "
          + (hh < 10 ? '0' : '') + hh + timeSeparator
          + (mm < 10 ? '0' : '') + mm + timeSeparator
          + (ss < 10 ? '0' : '') + ss;
    }
}

/**
 * 时间格式化
 * 将 毫秒格式转换为 yyyy-MM-dd HH:mm
 * 可以指定日期和时间分隔符
 * @param dateTime
 * @param type
 */
export function simpleDateFormat(dateTime, type) {
    let d = new Date(dateTime);
    let year = d.getFullYear();
    let month = d.getMonth() + 1;
    let day = d.getDate();
    let hh = d.getHours();
    let mm = d.getMinutes();
    let ss = d.getSeconds();
    if (month < 10)month = '0' + month;
    if (day < 10) day = '0' + day;
    if (hh < 10) hh = '0' + hh;
    if (mm < 10) mm = '0' + mm;
    if (ss < 10) ss = '0' + ss;

    let timeFormat = '';
    if (type === 'yyyy-MM-dd') {
        timeFormat = year + '-' + month + '-' + day;
    } else if(type === 'yyyy-MM-dd HH:mm') {
        timeFormat = year + '-' + month + '-' + day +' '+ hh + ":" + mm;
    } else if(type === 'yyyy-MM-dd HH:mm:ss') {
        timeFormat = year + '-' + month + '-' + day +' '+ hh + ":" + mm + ":" + ss;
    } else if(type === 'yyyy年MM月dd日') {
        timeFormat = year + '年' + month + '月' + day + '日';
    } else if(type === 'yyyyMMdd') {
        timeFormat = year + '' + month + '' + day;
    } else if(type === 'yyyy-MM') {
      timeFormat = year + '-' + month;
    }
    return timeFormat;
}

/**
 * 时间格式化
 * 将长整形时间 格式化成 2018-09-23 11:54:16
 * @param millis 长整型时间
 * @param format 日期格式
 */
export function formatLongDate(millis, format) {
    if (!millis) return '';
    if (!format) format = "yyyy-MM-dd HH:mm:ss";

    return simpleDateFormat(millis, format);
}

/**
 * 时间解释
 * 将格式为2018-09-23 11:54:16转成长整形
 * @param datetime 国际化日期格式
 */
export function parseLongDate(datetime) {
    if (!datetime) return '';

    return new Date(datetime.replace(/-/g, "/")).getTime();
}

/**
 * 获取当前时间，长整形
 */
export function getCurrTime() {
    return new Date().getTime();
}

export function formatDate(dateMat) {
    let year = dateMat.getFullYear();
    let month = dateMat.getMonth() + 1;
    let day = dateMat.getDate();

    return year + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
}

/**
 * 获取2个日期相关天数
 * @param startTime
 * @param endTime
 * @returns {number}
 */
function getDiffDay(startTime, endTime) {
    if (!startTime || !endTime) return '';

    const milliSecond = endTime - startTime;
    return Math.floor(milliSecond / (24 * 60 * 60 * 1000));
}

/**
 * 获取2个日期相关天数
 * @param startTime
 * @param endTime
 */
function getDiffPeriod(startTime, endTime) {
    if (!startTime || !endTime) return '';
    const d1 = new Date(startTime);
    const d2 = new Date(endTime);
    if (d2.getFullYear() - d1.getFullYear() > 0) {
        return d2.getFullYear() - d1.getFullYear() + ' 年';
    } else if (d2.getMonth() - d1.getMonth() > 0) {
        return d2.getMonth() - d1.getMonth() + ' 月';
    } else if (d2.getDay() - d1.getDay() > 0) {
        return d2.getDay() - d1.getDay() + ' 日';
    } else if (d2.getDay() - d1.getDay() === 0) {
        return '1';
    } else {
        return '0';
    }
}

function getDiffTime(startDate, endDate) {
    const total = (endDate - startDate) / 1000;
    const day = Math.floor(total / (24 * 60 * 60));
    const hour = Math.floor((total - day * 24 * 60 * 60) / (60 * 60));
    const minute = Math.floor((total - day * 24 * 60 * 60 - hour * 60 * 60) / 60);
    const second = Math.floor(total - day * 24 * 60 * 60 - hour * 60 * 60 - minute * 60);

    let result = '';
    if (day > 0) {
        result += " " + day + " 天";
    }
    if (hour > 0) {
        result += " " + hour + " 小时";
    }
    if (minute > 0) {
        result += " " + minute + " 分";
    }
    if (second > 0) {
        result += " " + second + " 秒";
    }
    if (result === '') {
        result += "0 秒";
    }
    return result;
}

export default {
    format,
    getCurrTime,
    parseLongDate,
    formatLongDate,
    getDiffDay,
    getDiffPeriod,
    getDiffTime
}
